/*@author cerimice*/
package Dialogos.Modulo.Apartados;

import Dialogos.Modal.Apartados.DatosApartadoDlg;
import Logica.Modulo.Apartados.SeguimientoApartadoLogica;
import Persistencia.Definicion.Apartado;
import Persistencia.Definicion.SeguimientoApartado;
import Sistema.Configuracion;
import com.vaadin.data.Property;
import com.vaadin.terminal.StreamResource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.*;
import com.vaadin.ui.themes.BaseTheme;
import java.util.logging.Logger;


public class SeguimientoApartadoDlg extends Panel
    {
    private SeguimientoApartadoLogica logica;
    
    private TextField   valorBusqueda,claveApartado,montoTotal,pagoRealizado,adeudo;
    private Button      buscar,mostrarDatosApartado,generarReporte,agregarSeguimiento;
    private Table       resultado,seguimiento;
    
    
    public SeguimientoApartadoDlg()
        {
        logica = new SeguimientoApartadoLogica();
        
        iniciarComponentes();
        }
    
    private void iniciarComponentes()
        {
        claveApartado = new TextField();
        valorBusqueda = new TextField("Proporcione el folio de busqueda");
            valorBusqueda.setWidth("800px");
        buscar = new Button("Buscar");
            buscar.setWidth("100px");
            buscar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){buscarApartados();}});
        resultado = new Table("Resultados encontrados");
            resultado.setNullSelectionAllowed(false);
            resultado.setSelectable(true);
            resultado.setImmediate(true);
            resultado.setWidth("900px");
            resultado.setHeight("150px");
            resultado.addContainerProperty("FOLIO",String.class,"");
            resultado.addContainerProperty("CLIENTE",String.class,"");
            resultado.addContainerProperty("MARCA",String.class,"");
            resultado.addContainerProperty("MONTO TOTAL",Float.class,"");
            resultado.setColumnWidth("FOLIO",100);
            resultado.setColumnWidth("CLIENTE",440);
            resultado.setColumnWidth("MARCA",200);
            resultado.setColumnWidth("MONTO TOTAL",100);
            resultado.addListener(new Property.ValueChangeListener() {@Override public void valueChange(Property.ValueChangeEvent event) {cargarInformacionSeleccionado();}});
        seguimiento = new Table("Pagos Realizados");
            seguimiento.setNullSelectionAllowed(false);
            seguimiento.setSelectable(true);
            seguimiento.setImmediate(true);
            seguimiento.setWidth("650px");
            seguimiento.setHeight("150px");
            seguimiento.addContainerProperty("CLAVE",String.class,"");
            seguimiento.addContainerProperty("FECHA",String.class,"");
            seguimiento.addContainerProperty("MONTO",Float.class,"");
            seguimiento.addContainerProperty("COMENTARIO",TextArea.class,"");
            seguimiento.setColumnWidth("CLAVE",100);
            seguimiento.setColumnWidth("FECHA",100);
            seguimiento.setColumnWidth("MONTO",100);
            seguimiento.setColumnWidth("COMENTARIO",275);
        montoTotal = new TextField("Monto Total");
            montoTotal.setWidth("250px");
            montoTotal.setEnabled(false);
        pagoRealizado  = new TextField("Pago Realizado");
            pagoRealizado.setWidth("250px");
            pagoRealizado.setEnabled(false);
        adeudo  = new TextField("Adeudo");
            adeudo.setWidth("250px");
            adeudo.setEnabled(false);
        mostrarDatosApartado = new Button();
            mostrarDatosApartado.setWidth("32px");
            mostrarDatosApartado.setIcon(new ThemeResource("icons/personal/informacionOrden.png"));
            mostrarDatosApartado.setStyleName(BaseTheme.BUTTON_LINK);
            mostrarDatosApartado.setDescription("Muestra la información del Apartado");
            mostrarDatosApartado.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){mostrarInformacionApartado();}});
        agregarSeguimiento = new Button();
            agregarSeguimiento.setWidth("32px");
            agregarSeguimiento.setIcon(new ThemeResource("icons/personal/generarOrdenServicio.png"));
            agregarSeguimiento.setStyleName(BaseTheme.BUTTON_LINK);
            agregarSeguimiento.setDescription("Genera seguimiento del Apartado");
            agregarSeguimiento.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){agregarSeguimientoApartado();}});
        generarReporte = new Button();
            generarReporte.setWidth("32px");
            generarReporte.setIcon(new ThemeResource("icons/personal/imprimirOrdenServicio.png"));
            generarReporte.setStyleName(BaseTheme.BUTTON_LINK);
            generarReporte.setDescription("Muestra la información del Apartado");
            generarReporte.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){reportePDF();}});

        VerticalLayout principal =  new VerticalLayout();
            VerticalLayout seccionBuscar = new VerticalLayout();
                HorizontalLayout seccionBuscar1 = new HorizontalLayout();
                    seccionBuscar1.addComponent(valorBusqueda);
                    seccionBuscar1.addComponent(buscar);
                seccionBuscar.addComponent(seccionBuscar1);
                seccionBuscar.addComponent(resultado);
                    
            HorizontalLayout seccionSeguimiento = new HorizontalLayout();
                seccionSeguimiento.addComponent(seguimiento);
                VerticalLayout seccionSeguimientoDatos = new VerticalLayout();
                    seccionSeguimientoDatos.addComponent(montoTotal);
                    seccionSeguimientoDatos.addComponent(pagoRealizado);
                    seccionSeguimientoDatos.addComponent(adeudo);
                seccionSeguimiento.addComponent(seccionSeguimientoDatos);
            
            HorizontalLayout seccionOperaciones = new HorizontalLayout();
                seccionOperaciones.addComponent(mostrarDatosApartado);
                seccionOperaciones.addComponent(agregarSeguimiento);
                seccionOperaciones.addComponent(generarReporte);

            principal.addComponent(seccionBuscar);
            principal.addComponent(seccionSeguimiento);
            principal.addComponent(seccionOperaciones);
            principal.setComponentAlignment(seccionBuscar,Alignment.TOP_CENTER);
            principal.setComponentAlignment(seccionSeguimiento,Alignment.TOP_CENTER);
            principal.setComponentAlignment(seccionOperaciones,Alignment.TOP_CENTER);
        
        this.setCaption("SEGUIMIENTO DE APARTADOS");
        this.addComponent(principal);
        }
    
    private void cargarInformacionSeleccionado()
        {
        try
            {
            TextArea comentario;
            float abonos = 0;
            claveApartado.setValue(resultado.getValue());
            Apartado apartado = logica.getApartado((String)claveApartado.getValue());
            for(SeguimientoApartado obj:apartado.getSeguimiento())
                {
                abonos += obj.getMonto();
                comentario = new TextArea();
                    comentario.setValue(obj.getComentario());
                    comentario.setWidth("270px");
                    comentario.setHeight("50px");
                    comentario.setEnabled(false);
                seguimiento.addItem(new Object[]{obj.getClave(),Configuracion.getFormatoFechaCorta().format(obj.getFecha()),obj.getMonto(),comentario},obj.getClave());
                }
            montoTotal.setValue(Configuracion.getFormatoNumero().format(apartado.getMontoTotal()));
            pagoRealizado.setValue(Configuracion.getFormatoNumero().format(abonos));
            adeudo.setValue(Configuracion.getFormatoNumero().format(apartado.getMontoTotal()-abonos));
            }
        catch (Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        }
    
    private void mostrarInformacionApartado()
        {
        String apartado = (String)claveApartado.getValue();
        if((apartado.equals("")) || (apartado==null)){getWindow().showNotification("Seguimiento de Apartado...","Por favor seleccione un Apartado",Window.Notification.TYPE_WARNING_MESSAGE); return;}
        getWindow().addWindow(new DatosApartadoDlg(apartado));
        }
    
    private void buscarApartados()
        {
        try
            {
            int tipoBusqueda = 1;
            String valor = (String)valorBusqueda.getValue();
            if(valor==null)     {valor = ""; tipoBusqueda = 1;}
            resultado = logica.generarTabla(tipoBusqueda,valor,resultado);
            }
        catch (Exception ex)
            {
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            try
                {resultado = logica.generarTabla(1,"",resultado);}
            catch (Exception ex1)
                {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex1.getMessage());}
            }
        }
    
    private void reportePDF()
        {
        try
            {
            String apartado = (String)claveApartado.getValue();
            if((apartado.equals("")) || (apartado==null)){getWindow().showNotification("Seguimiento de Apartado...","Por favor seleccione un Apartado",Window.Notification.TYPE_WARNING_MESSAGE); return;}
            
            Window window = new Window();
                ((VerticalLayout) window.getContent()).setSizeFull();
                window.setResizable(true);
                window.setWidth("800");
                window.setHeight("600");
                window.center();
            Embedded e = new Embedded();
                e.setSizeFull();
                e.setType(Embedded.TYPE_BROWSER);
                StreamResource resource = new StreamResource(logica.reporteGenerarApartado(apartado), "OrdenDeApartado"+System.currentTimeMillis()+".pdf",this.getApplication());
                resource.setMIMEType("application/pdf");
                e.setSource(resource);
            window.addComponent(e);
            this.getApplication().getMainWindow().addWindow(window);
            }
        catch (Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        }
    
    private void agregarSeguimientoApartado()
        {
        String apartado = (String)claveApartado.getValue();
        if((apartado.equals("")) || (apartado==null)){getWindow().showNotification("Seguimiento de Apartado...","Por favor seleccione un Apartado",Window.Notification.TYPE_WARNING_MESSAGE); return;}
        getWindow().addWindow(new Dialogos.Modal.Apartados.SeguimientoApartadoDlg(apartado));
        cargarInformacionSeleccionado();
        }
    }
